/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-12-19
 * Time: 下午4:55
 * To change this template use File | Settings | File Templates.
 */
(function () {
	var title = $G("J_title"),
		titleCol = $G("J_titleCol"),
		caption = $G("J_caption"),
		sorttable = $G("J_sorttable"),
		autoSizeContent = $G("J_autoSizeContent"),
		autoSizePage = $G("J_autoSizePage"),
		tone = $G("J_tone"),
		me,
		preview = $G("J_preview");

	var editTable = function () {
		me = this;
		me.init();
	};
	editTable.prototype = {
		init:function () {
			var colorPiker = new UE.ui.ColorPicker({
					editor:editor
				}),
				colorPop = new UE.ui.Popup({
					editor:editor,
					content:colorPiker
				});

			title.checked = editor.queryCommandState("inserttitle") == -1;
			titleCol.checked = editor.queryCommandState("inserttitlecol") == -1;
			caption.checked = editor.queryCommandState("insertcaption") == -1;
			sorttable.checked = editor.queryCommandState("enablesort") == 1;

			var enablesortState = editor.queryCommandState("enablesort"),
				disablesortState = editor.queryCommandState("disablesort");

			sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);
			sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);
			sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';

			me.createTable(title.checked, titleCol.checked, caption.checked);
			me.setAutoSize();
			me.setColor(me.getColor());

			domUtils.on(title, "click", me.titleHanler);
			domUtils.on(titleCol, "click", me.titleColHanler);
			domUtils.on(caption, "click", me.captionHanler);
			domUtils.on(sorttable, "click", me.sorttableHanler);
			domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler);
			domUtils.on(autoSizePage, "click", me.autoSizePageHanler);

			domUtils.on(tone, "click", function () {
				colorPop.showAnchor(tone);
			});
			domUtils.on(document, 'mousedown', function () {
				colorPop.hide();
			});
			colorPiker.addListener("pickcolor", function () {
				me.setColor(arguments[1]);
				colorPop.hide();
			});
			colorPiker.addListener("picknocolor", function () {
				me.setColor("");
				colorPop.hide();
			});
		},

		createTable:function (hasTitle, hasTitleCol, hasCaption) {
			var arr = [],
				sortSpan = '<span>^</span>';
			arr.push("<table id='J_example'>");
			if (hasCaption) {
				arr.push("<caption>" + lang.captionName + "</caption>")
			}
			if (hasTitle) {
				arr.push("<tr>");
				if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>"); }
				for (var j = 0; j < 5; j++) {
					arr.push("<th>" + lang.titleName + "</th>");
				}
				arr.push("</tr>");
			}
			for (var i = 0; i < 6; i++) {
				arr.push("<tr>");
				if(hasTitleCol) { arr.push("<th>" + lang.titleName + "</th>") }
				for (var k = 0; k < 5; k++) {
					arr.push("<td>" + lang.cellsName + "</td>")
				}
				arr.push("</tr>");
			}
			arr.push("</table>");
			preview.innerHTML = arr.join("");
			this.updateSortSpan();
		},
		titleHanler:function () {
			var example = $G("J_example"),
				frg=document.createDocumentFragment(),
				color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
				colCount = example.rows[0].children.length;

			if (title.checked) {
				example.insertRow(0);
				for (var i = 0, node; i < colCount; i++) {
					node = document.createElement("th");
					node.innerHTML = lang.titleName;
					frg.appendChild(node);
				}
				example.rows[0].appendChild(frg);

			} else {
				domUtils.remove(example.rows[0]);
			}
			me.setColor(color);
			me.updateSortSpan();
		},
		titleColHanler:function () {
			var example = $G("J_example"),
				color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
				colArr = example.rows,
				colCount = colArr.length;

			if (titleCol.checked) {
				for (var i = 0, node; i < colCount; i++) {
					node = document.createElement("th");
					node.innerHTML = lang.titleName;
					colArr[i].insertBefore(node, colArr[i].children[0]);
				}
			} else {
				for (var i = 0; i < colCount; i++) {
					domUtils.remove(colArr[i].children[0]);
				}
			}
			me.setColor(color);
			me.updateSortSpan();
		},
		captionHanler:function () {
			var example = $G("J_example");
			if (caption.checked) {
				var row = document.createElement('caption');
				row.innerHTML = lang.captionName;
				example.insertBefore(row, example.firstChild);
			} else {
				domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);
			}
		},
		sorttableHanler:function(){
			me.updateSortSpan();
		},
		autoSizeContentHanler:function () {
			var example = $G("J_example");
			example.removeAttribute("width");
		},
		autoSizePageHanler:function () {
			var example = $G("J_example");
			var tds = example.getElementsByTagName(example, "td");
			utils.each(tds, function (td) {
				td.removeAttribute("width");
			});
			example.setAttribute('width', '100%');
		},
		updateSortSpan: function(){
			var example = $G("J_example"),
				row = example.rows[0];

			var spans = domUtils.getElementsByTagName(example,"span");
			utils.each(spans,function(span){
				span.parentNode.removeChild(span);
			});
			if (sorttable.checked) {
				utils.each(row.cells, function(cell, i){
					var span = document.createElement("span");
					span.innerHTML = "^";
					cell.appendChild(span);
				});
			}
		},
		getColor:function () {
			var start = editor.selection.getStart(), color,
				cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
			color = cell && domUtils.getComputedStyle(cell, "border-color");
			if (!color)  color = "#DDDDDD";
			return color;
		},
		setColor:function (color) {
			var example = $G("J_example"),
				arr = domUtils.getElementsByTagName(example, "td").concat(
					domUtils.getElementsByTagName(example, "th"),
					domUtils.getElementsByTagName(example, "caption")
				);

			tone.value = color;
			utils.each(arr, function (node) {
				node.style.borderColor = color;
			});

		},
		setAutoSize:function () {
			var me = this;
			autoSizePage.checked = true;
			me.autoSizePageHanler();
		}
	};

	new editTable;

	dialog.onok = function () {
		editor.__hasEnterExecCommand = true;

		var checks = {
			title:"inserttitle deletetitle",
			titleCol:"inserttitlecol deletetitlecol",
			caption:"insertcaption deletecaption",
			sorttable:"enablesort disablesort"
		};
		editor.fireEvent('saveScene');
		for(var i in checks){
			var cmds = checks[i].split(" "),
				input = $G("J_" + i);
			if(input["checked"]){
				editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);
			}else{
				editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);
			}
		}

		editor.execCommand("edittable", tone.value);
		autoSizeContent.checked ?editor.execCommand('adaptbytext') : "";
		autoSizePage.checked ? editor.execCommand("adaptbywindow") : "";
		editor.fireEvent('saveScene');

		editor.__hasEnterExecCommand = false;
	};
})();